package com.song.transport;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;


/**
 * 客户端发送给服务端的需求  请求消息
 * 服务端需要知道调用的传输相关信息
 * 找到对应方法并调用
 */
@Data
@Builder    //建造者模式 内部类Builder与当前类属性一致 先把所有的属性都设置给 Builder，然后 build() 方法的时候，将这些属性复制给实际产生的对象。   该类的静态公共的内部类Builder，用来该类成员的链式赋值
@NoArgsConstructor
@AllArgsConstructor
public class RPCRequest implements Serializable {
    /**
     * RPCRequest rq = RPCRequest.builder()
     * .interfaceName("xxx").methodName("xx").parameters({xxxx, xxx, xx}).paramTypes({})
     *  .build()
     */

    //请求号   一一对应    保证消息的幂等性
    private String requestId;

    /**
     * 调用的接口全限定名，服务端根据它找到实现
     *
     */
    //带调用接口名称
    private String interfaceName;//服务端和客户端的通用接口com.song.RPCInterface.HelloService

    //带调用方法
    private String methodName;//通用接口的方法名称hello

    //调用方法的参数
    private Object[] parameters;//传入的参数HelloObject(id=13, message=This client 1)

    //调用方法的参数类型
    private Class<?>[] paramTypes;//class com.song.api.HelloObject

    //方法参数值数组
    private Object[] paramterValue;//null

}
